// todo(kazuki):: fix workaround
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"

#ifndef EXPORTED_VULKAN_FUNCTION
#define EXPORTED_VULKAN_FUNCTION(function)
#endif

EXPORTED_VULKAN_FUNCTION(vkGetInstanceProcAddr)

#undef EXPORTED_VULKAN_FUNCTION

#ifndef GLOBAL_VULKAN_FUNCTION
#define GLOBAL_VULKAN_FUNCTION(func)
#endif

GLOBAL_VULKAN_FUNCTION(vkCreateInstance)

#undef GLOBAL_VULKAN_FUNCTION

#ifndef INSTANCE_VULKAN_FUNCTION
#define INSTANCE_VULKAN_FUNCTION(func)
#endif

INSTANCE_VULKAN_FUNCTION(vkEnumeratePhysicalDevices)
INSTANCE_VULKAN_FUNCTION(vkEnumerateDeviceExtensionProperties)
INSTANCE_VULKAN_FUNCTION(vkGetPhysicalDeviceQueueFamilyProperties)
INSTANCE_VULKAN_FUNCTION(vkGetPhysicalDeviceMemoryProperties)
INSTANCE_VULKAN_FUNCTION(vkGetPhysicalDeviceFormatProperties)
INSTANCE_VULKAN_FUNCTION(vkCreateDevice)
INSTANCE_VULKAN_FUNCTION(vkGetDeviceProcAddr)
INSTANCE_VULKAN_FUNCTION(vkDestroyInstance)

#undef INSTANCE_VULKAN_FUNCTION

#ifndef DEVICE_VULKAN_FUNCTION
#define DEVICE_VULKAN_FUNCTION(function)
#endif

DEVICE_VULKAN_FUNCTION(vkDestroyDevice)
DEVICE_VULKAN_FUNCTION(vkCreateImage)
DEVICE_VULKAN_FUNCTION(vkCmdBeginRenderPass)
DEVICE_VULKAN_FUNCTION(vkCreateBuffer)
DEVICE_VULKAN_FUNCTION(vkGetBufferMemoryRequirements)
DEVICE_VULKAN_FUNCTION(vkGetImageSubresourceLayout)
DEVICE_VULKAN_FUNCTION(vkMapMemory)
DEVICE_VULKAN_FUNCTION(vkBindBufferMemory)
DEVICE_VULKAN_FUNCTION(vkAllocateMemory)
DEVICE_VULKAN_FUNCTION(vkAllocateCommandBuffers)
DEVICE_VULKAN_FUNCTION(vkCreateCommandPool)
DEVICE_VULKAN_FUNCTION(vkDestroyCommandPool)
DEVICE_VULKAN_FUNCTION(vkDestroyBuffer)
DEVICE_VULKAN_FUNCTION(vkDestroyImage)
DEVICE_VULKAN_FUNCTION(vkGetDeviceQueue)
DEVICE_VULKAN_FUNCTION(vkFreeMemory)
DEVICE_VULKAN_FUNCTION(vkUnmapMemory)
DEVICE_VULKAN_FUNCTION(vkQueueWaitIdle)
DEVICE_VULKAN_FUNCTION(vkDeviceWaitIdle)
DEVICE_VULKAN_FUNCTION(vkCmdCopyBufferToImage)
DEVICE_VULKAN_FUNCTION(vkFlushMappedMemoryRanges)
DEVICE_VULKAN_FUNCTION(vkCreatePipelineLayout)
DEVICE_VULKAN_FUNCTION(vkCreateShaderModule)
DEVICE_VULKAN_FUNCTION(vkDestroyShaderModule)
DEVICE_VULKAN_FUNCTION(vkCreateGraphicsPipelines)
DEVICE_VULKAN_FUNCTION(vkCmdBindPipeline)
DEVICE_VULKAN_FUNCTION(vkCmdDraw)
DEVICE_VULKAN_FUNCTION(vkCmdPushConstants)
DEVICE_VULKAN_FUNCTION(vkCmdBindVertexBuffers)
DEVICE_VULKAN_FUNCTION(vkDestroyPipeline)
DEVICE_VULKAN_FUNCTION(vkBeginCommandBuffer)
DEVICE_VULKAN_FUNCTION(vkBindImageMemory)
DEVICE_VULKAN_FUNCTION(vkCmdCopyImage)
DEVICE_VULKAN_FUNCTION(vkCmdPipelineBarrier)
DEVICE_VULKAN_FUNCTION(vkCreateImageView)
DEVICE_VULKAN_FUNCTION(vkEndCommandBuffer)
DEVICE_VULKAN_FUNCTION(vkResetCommandBuffer)
DEVICE_VULKAN_FUNCTION(vkFreeCommandBuffers)
DEVICE_VULKAN_FUNCTION(vkGetImageMemoryRequirements)
DEVICE_VULKAN_FUNCTION(vkQueueSubmit)
DEVICE_VULKAN_FUNCTION(vkDestroyPipelineLayout)
DEVICE_VULKAN_FUNCTION(vkWaitForFences)
DEVICE_VULKAN_FUNCTION(vkCreateFence)
DEVICE_VULKAN_FUNCTION(vkDestroyFence)
DEVICE_VULKAN_FUNCTION(vkResetFences)
DEVICE_VULKAN_FUNCTION(vkGetFenceStatus)

#undef DEVICE_LEVEL_VULKAN_FUNCTION

#pragma clang diagnostic pop
